#include <iostream>
#include <signal.h>
#include <unistd.h>

using namespace std;

//打印block表
void PrintBlock()
{
    sigset_t set,oset;
    sigemptyset(&set);
    sigemptyset(&oset);
    sigprocmask(SIG_BLOCK,&set,&oset);
    for(int i = 31;i > 0;i--)
    {
        if(sigismember(&oset,i))
        {
            cout<<1;
        }
        else cout<<0;
    }
}

void PrintPending()
{
    sigset_t pending;
    sigpending(&pending);
    for(int i = 31;i > 0;i--)
    {
        if(sigismember(&pending,i)) cout<<1;
        else cout<<0;
    }
}

int cnt = 0;

void handler(int signo)
{
    cnt++;
    while(true)
    {
        cout<<"get a new signal:"<<signo<<" cnt:"<<cnt<<endl;
        PrintPending();
        sleep(1);
    }    
}

int main()
{
    struct sigaction act,oact;//创建结构体对象
    act.sa_handler = handler;
    sigemptyset(&act.sa_mask);
    sigaction(2,&act,&oact);
    while(true)
    {
        pause();
    }
    return 0;
}